package com.junzhiit.nengji.dao;

import java.util.Date;
import java.util.List;

import com.bainaeco.framework.base.dao.BaseDAO;
import com.junzhiit.nengji.bo.CountOrdersStatusBO;
import com.junzhiit.nengji.bo.OrdersAndDetailsBO;
import com.junzhiit.nengji.bo.OrdersBO;
import com.junzhiit.nengji.bo.OrdersPrintingBO;
import com.junzhiit.nengji.bo.OrdersTransactionInfoBO;
import com.junzhiit.nengji.model.Orders;
import com.junzhiit.nengji.model.UserEvaluate;

public interface OrdersDAO extends BaseDAO<Orders>{

	/**
	 * 
	 * TODO 统计订单数量
	 * @author PeterMo
	 * @time 2018年2月24日 下午6:16:42
	 * @return int
	 */
	public int getTotalCount(OrdersBO ordersBO,Boolean isRefund);
	
	/**
	 * 
	 * TODO 查询所有订单
	 * @author PeterMo
	 * @time 2018年2月24日 下午6:16:26
	 * @return List<OrdersBO>
	 */
	public List<OrdersBO> findAll(Integer pageNumber, Integer maxPageRow,OrdersBO ordersBO,Boolean isRefund);
	
	/**
	 * 
	 * TODO 根据ID查询订单
	 * @author PeterMo
	 * @time 2018年2月24日 下午6:16:08
	 * @return OrdersBO
	 */
	public OrdersBO findOrderId(String orderId);
	
	/**
	 * TODO 打印功能查询订单详情
	 * @author Dlam
	 * @time 2018年9月20日 上午10:44:40
	 * @return OrdersBO
	 * 
	 */
	public OrdersPrintingBO findOrderIdToPrinting(String orderId);
	
	/**
	 * 
	 * TODO api 查询订单
	 * @author PeterMo
	 * @time 2018年2月24日 下午4:17:36
	 * @return List<OrdersBO>
	 * 
	 */
	public List<OrdersBO> orders(Integer pageNumber,Integer maxPageRow,Integer status,Integer type, String userId,String shopId);
	
	/**
	 * 
	 * TODO api 统计订单数量
	 * @author PeterMo
	 * @time 2018年2月24日 下午4:30:07
	 * @return int
	 * 
	 */
	public int getGoodsTotalCount(Integer status, String userId,Integer type);
	
	/**
	 * 
	 * TODO api 查询订单(线下商品订单支付页面)
	 * 
	 * @author Qjen
	 * @time 2018年3月15日 上午11:38:34
	 * @return OrdersBO
	 *
	 */
	public OrdersBO findOrderOffline(String orderNumber);
	
	/**
	 * 
	 * TODO 获得默认好评的订单
	 * 
	 * @author Qjen
	 * @time 2018年3月20日 上午10:30:09
	 * @return List<Orders>
	 *
	 */
	public List<Orders> getOrdersDefaultEvaluate(Date date);
	
	/**
	 * 
	 * TODO 获得发货中的订单
	 * 
	 * @author Qjen
	 * @time 2018年3月20日 下午6:04:48
	 * @return List<Orders>
	 *
	 */
	public List<Orders> getShippedOrders();
	
	/**
	 * 
	 * TODO 根据订单编号查询所有订单
	 * @author PetetMo
	 * @time 2018年3月26日 上午10:25:31
	 * @return List<Orders>
	 */
	public List<Orders> getOrderByOrderNumber(String orderNumber);
	
	/**
	 * 
	 * TODO 首页统计订单数量
	 * @author PetetMo
	 * @time 2018年3月28日 下午3:27:06
	 * @return int
	 */
	public int orderTotalCount(String userId);
		
	/**
	 * 
	 * TODO 根据验证密码查询订单
	 * 
	 * @author FebRosy
	 * @time 2018年3月29日 上午10:49:36
	 * @return OrdersBO
	 */
	public OrdersBO getcheckOrders(Orders orders);
	
	/**
	 * TODO 查询订单支付
	 * @author PetetMo
	 * @param userId
	 * @param orderNumber
	 * @return
	 */
	public List<Orders> getOrderByPay(String userId, String orderNumber);
	
	/**
	 * 
	 * TODO 根据店铺订单编号查询
	 * @author PeterMo
	 * @time 2018年4月19日 下午2:35:04
	 * @return Orders
	 */
	public Orders findByShopOrderNumber(String userId, String shopOrderNumber);
	
	/**
	 * 
	 * TODO 获得待评价订单默认好评数据
	 * 
	 * @author Qjen
	 * @time 2018年3月20日 上午9:38:02
	 * @return List<UserEvaluate>
	 *
	 */
	public List<UserEvaluate> getDefaultEvaluate(Date date);
	
	/**
	 * TODO 根据订单状态查询订单
	 * 
	 * @author PeterMo
	 * @time 2018年4月18日 上午1:32:15
	 * @return List<Orders>
	 */
	public List<Orders> findByStatus(Integer status);
	

	/**
	 * 
	 * TODO 根据商铺订单编号查询
	 * @author PeterMo
	 * @time 2018年4月19日 下午3:47:02
	 * @return Orders
	 */
	public Orders getOrderByShopOrderNumber(String shopOrderNumber);
	
	/**
	 * 
	 * TODO 根据订单ID查询物流信息
	 * @author PeterMo
	 * @time 2018年4月21日 下午2:29:05
	 * @return OrdersBO
	 */
	public OrdersBO findLogistics(String orderId);
	
	/**
	 * 
	 * TODO 查询byOrderNumber
	 * 
	 * @author Qjen
	 * @time 2018年4月27日 上午1:44:20
	 * @return Orders
	 *
	 */
	public Orders getOrdersByOrderNumber(String orderNumber);
	
	/**
	 * 
	 * TODO 统计已付款订单个数
	 * 
	 * @author Qjen
	 * @time 2018年5月2日 上午10:31:21
	 * @return Integer
	 *
	 */
	public Integer getPaidOrderCount(String shopId);
	
	/**
	 * 
	 * TODO 查询确认收货后7天的数据(普通商品)
	 * @author PeterMo
	 * @time 2018年5月15日 下午2:46:46
	 * @return List<Orders>
	 */
	public List<OrdersBO> getOrderByConfirmTime(Date date,Integer isOpenSell); 
	
	/**
	 * 
	 * TODO 统计用户购物金额
	 * @author PeterMo
	 * @time 2018年5月16日 下午8:30:43
	 * @return Double
	 */
	public Double sumPayMoney(String userId);
	
	/**
	 * 根据订单ID查询(返利商品)
	 * @author PeterMo
	 * @time 2018年5月16日 下午8:30:43
	 * @return
	 */
	public List<OrdersBO> findOrderByid(String orderGoodsId);
	
	/**
	 * 
	 * TODO  查询订单状态不为(0,7)
	 * @author PeterMo
	 * @time 2018年5月16日 下午8:30:43
	 * @return
	 */
	public List<Orders> getOrderByStatus();
	
	/**
	 * 
	 * TODO 统计连锁品牌订单数量
	 * @author Zaki
	 * @time 2018年6月13日 下午1:55:54
	 * @return HomeHeaderInfoBO
	 */
	public int getTotal(String chainId);
	
	/**
	 * 
	 * TODO 根据订单ID查询让利值
	 * @author PeterMo
	 * @time 2018年6月19日 下午4:51:49
	 * @return OrdersBO
	 */
	public OrdersBO findOrderById(String id);	
	
	/**
	 * 
	 * TODO 查询订单及订单明细
	 * 
	 * @author Harry
	 * @time 2018年6月28日 下午6:14:42
	 * @return OrdersAndDetailsBO
	 */
	public List<OrdersAndDetailsBO> findOdersAndDetails(OrdersAndDetailsBO oadb);
	
	/**
	 * 
	 * TODO 查找所有未确认的配送订单
	 * @author Zaki
	 * @time 2018年7月28日 下午8:44:43
	 * @return List<Orders>
	 */
	public List<Orders> findWaitConfirm(Date deliveryTime,Integer status);
	
	/**
	 * TODO  统计用户在店铺下的交易次数和交易金额
	 * @author Qjen
	 * @time 2018年8月3日 上午11:49:48
	 * @return OrdersTransactionInfoBO
	 * 
	 */
	public OrdersTransactionInfoBO countUserTransaction(String userId,String csId,Integer isChain,Date receiveDate);
	
	/**
	 * TODO 统计该店铺下各个状态下的有效订单数量
	 * @author Dlam
	 * @time 2018年9月6日 上午11:00:35
	 * @return Object
	 * 
	 */
	public List<CountOrdersStatusBO> countOrdersStatus(String shopId);
	
	/**
	 * 
	 * TODO 查询预约订单的信息
	 * @author Zaki
	 * @time 2018年9月18日 下午3:07:21
	 * @return OrdersBO
	 */
	public OrdersBO findReserveInfo(String ordersId);
}
